//package com.bian.plugin.boot.classloader;
//
//import java.net.JarURLConnection;
//import java.net.URL;
//import java.net.URLClassLoader;
//import java.net.URLConnection;
//import java.util.List;
//import java.util.concurrent.CopyOnWriteArrayList;
//
///**
// * 插件类加载器，用于加载jar到classpath
// *
// * @author bian
// * @since 1.0
// * 2021/2/22
// */
//public class PluginClassLoader extends URLClassLoader {
//
//    private List<JarURLConnection> cachedJarList = new CopyOnWriteArrayList<>();
//
//    public PluginClassLoader(URL[] urls, ClassLoader parent) {
//        super(urls, null != parent ? parent : PluginClassLoader.class.getClassLoader() != null ?
//                PluginClassLoader.class.getClassLoader() : ClassLoader.getSystemClassLoader());
//    }
//
//    /**
//     * 将指定的文件url添加到类加载器的classpath中去，并缓存jar connection，方便以后卸载jar
//     *
//     * @param file
//     */
//    public void addURLFile(URL file) {
//        try {
//            // 打开并缓存文件url连接
//            URLConnection uc = file.openConnection();
//            if (uc instanceof JarURLConnection) {
//                uc.setUseCaches(true);
//                ((JarURLConnection) uc).getManifest();
//                cachedJarList.add((JarURLConnection) uc);
//            }
//        } catch (Exception e) {
//            System.err.println("Failed to cache plugin JAR file: " + file.toExternalForm());
//            e.printStackTrace();
//        }
//        addURL(file);
//    }
//
//    /**
//     * 卸载jar包
//     */
//    public void unloadJarFiles() {
//        for (JarURLConnection url : cachedJarList) {
//            try {
//                System.err.println("Unloading plugin JAR file " + url.getJarFile().getName());
//                url.getJarFile().close();
//                url = null;
//            } catch (Exception e) {
//                System.err.println("Failed to unload JAR file\n" + e);
//            }
//        }
//    }
//}
